package com.bestcem.xm.ticket.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.ticket.controller.param.ticket.config.CreateConfigParam;
import com.bestcem.xm.ticket.controller.param.ticket.config.UpdateConfigParam;
import com.bestcem.xm.ticket.controller.vo.ticket.config.OnlyNotifyConfigVO;
import com.bestcem.xm.ticket.controller.vo.ticket.config.TicketConfigInfoV3VO;
import com.bestcem.xm.ticket.controller.vo.ticket.config.TicketConfigInfoVO;
import com.bestcem.xm.ticket.entity.mongo.TicketNotifyConfig;

import java.util.List;

/**
 * 工单通知配置
 *
 * @author jy.zhao
 * @version 1.0
 * @date 2021/8/16 16:25
 **/
public interface TicketNotifyConfigService {

    /**
     * 根据id查询工单通知配置
     *
     * @param id 工单通知配置id
     * @return TicketNotifyConfig
     * @author jy.zhao
     * @date 2021/8/16 16:13
     **/
    TicketNotifyConfig findById(String id);

    /**
     * 清理保存的已删除邮箱的id
     *
     * @param smtpIds 邮箱ids
     * @author jy.zhao
     * @date 2021/8/25 13:33
     **/
    void clearConfigSmtpId(List<String> smtpIds);

    /**
     * 确认工单配置推送方式，并修改对应的 TicketNotifyConfig 实体
     *
     * @param ticketConfig 工单配置对象
     * @return 工单配置对象
     * @author liheng
     * @date 2021/8/25 13:34
     */
    TicketConfigInfoVO parseTicketNotifyConfig(TicketConfigInfoVO ticketConfig);

    /**
     * 确认工单配置推送方式，并修改对应的 TicketNotifyConfig 实体
     *
     * @param ticketConfig 工单配置对象
     * @return 工单配置对象
     * @author liheng
     * @date 2021/8/25 13:34
     */
    TicketConfigInfoV3VO parseTicketConfigNotifyV3(TicketConfigInfoV3VO ticketConfig);


    /**
     * ticketConfig转换给前端的VO
     *
     * @param ticketConfigInfoVO vo
     * @return 转换后的TicketConfigVO
     * @author liheng
     * @date 2021/8/25 13:34
     */
    OnlyNotifyConfigVO parseTicketOnlyNotifyConfig(TicketConfigInfoVO ticketConfigInfoVO);


    /**
     * ticketConfig转换给前端的VO
     *
     * @param ticketConfigInfoVO vo
     * @return 转换后的TicketConfigVO
     * @author liheng
     * @date 2021/8/25 13:34
     */
    OnlyNotifyConfigVO parseNotifyConfigForTicketConfigV3(TicketConfigInfoV3VO ticketConfigInfoVO);

    /**
     * 初始化工单通知配置-新建工单配置使用
     *
     * @param ticketConfigId 工单配置id
     * @param param          param
     * @return 工单通知配置id listS
     * @author liheng
     * @date 2021/8/25 13:53
     */
    List<String> initTicketNotifyConfig(String ticketConfigId, CreateConfigParam param);

    /**
     * 修改工单通知配置
     *
     * @param ticketConfigId
     * @param param
     * @author liheng
     * @date 2021/8/25 22:20
     */
    ServiceResult<List<TicketNotifyConfig>> updateNotifyConfig(String ticketConfigId, UpdateConfigParam param);
}
